package cc.comac.mom.datahandlers.entity;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import cc.comac.mom.bean.QarRestrictedPart;
import cc.comac.mom.dao.entity.QarRestrictedPartDao;
import cc.comac.mom.dao.entity.QarRestrictedPartItemDao;
import cc.comac.mom.entity.QarRestrictedPartEntity;
import cc.comac.mom.entity.QarRestrictedPartItemEntity;
import cc.comac.mom.entity.print.RestrictedPartItemPrint;
import cc.comac.mom.util.BaseEntityDataUtil;
import cc.comac.mom.util.ResultBean;
import cc.comac.mom.util.TimeUtil;
import cc.comac.mom.util.user.UserUtil;

@Service
public class QarRestrictedPartDataHandler extends ServiceImpl<QarRestrictedPartDao, QarRestrictedPartEntity>{

	@Autowired
	private QarRestrictedPartDao qarRestrictedPartDao;
	@Autowired
	private QarRestrictedPartItemDao qarRestrictedPartItemDao;
	@Autowired
	private QarRestrictedPartItemDataHandler qarRestrictedPartItemDataHandler;
	@Autowired
	private BaseEntityDataUtil baseEntityDataUtil;
	@Autowired
	private UserUtil userUtil;
	public void batchInsertData(List<QarRestrictedPartEntity> qarRestrictedPartEntity) {
		for (QarRestrictedPartEntity qarRestrictedPartEntity2 : qarRestrictedPartEntity) {
			if (StringUtils.isEmpty(qarRestrictedPartEntity2.getQarNo())) {
				throw new RuntimeException("新增限售件数据，qar编号不能为空");
			}
			baseEntityDataUtil.setBaseEntityData(qarRestrictedPartEntity2);
		}
		this.saveBatch(qarRestrictedPartEntity, qarRestrictedPartEntity.size());
	}
	// 限售件暂存修改数据,qar检验单保存限售数据功能
	public void batchUpdateData (List<QarRestrictedPart> qarRestrictedPartEntity) {
		List<QarRestrictedPartEntity> entityList = new ArrayList<QarRestrictedPartEntity>();
		List<QarRestrictedPartItemEntity> entityItemList = new ArrayList<QarRestrictedPartItemEntity>();
		for (QarRestrictedPart qarRestrictedPart : qarRestrictedPartEntity) {
			QarRestrictedPartEntity innerData = qarRestrictedPart.getInnerData();
			baseEntityDataUtil.updateBaseEntityData(innerData);
			List<QarRestrictedPartItemEntity> restrictedPartItemList = qarRestrictedPart.getRestrictedPartItemList();
			if (!CollectionUtils.isEmpty(restrictedPartItemList)) {
				restrictedPartItemList.forEach(item -> baseEntityDataUtil.setBaseEntityData(item));
				entityItemList.addAll(restrictedPartItemList);
			}
		}
		if (entityList.size() > 0) {
			this.updateBatchById(entityList, entityList.size());
		}
		if (entityItemList.size() >0) {
			qarRestrictedPartItemDataHandler.updateBatchById(entityItemList, entityItemList.size());
		}
	}
	
	public ResultBean updateCheckData(List<QarRestrictedPart> list) {
		ResultBean resultBean = new ResultBean(true);
		if (list != null && list.size() > 0) {
			
			List<QarRestrictedPartItemEntity> itemList = new ArrayList<QarRestrictedPartItemEntity>();
			for (QarRestrictedPart qarRestrictedPart : list) {
				if (!CollectionUtils.isEmpty(qarRestrictedPart.getRestrictedPartItemList())) {
					List<QarRestrictedPartItemEntity> restrictedPartItemList = qarRestrictedPart.getRestrictedPartItemList();
					itemList.addAll(restrictedPartItemList);
				}
			}
			List<Long> collect = list.stream().map(item -> item.getInnerData().getId()).collect(Collectors.toList());
			QueryWrapper<QarRestrictedPartEntity> queryWrapper = new QueryWrapper<QarRestrictedPartEntity>();
			queryWrapper.eq("row_status", 1);
			queryWrapper.in("restricted_id", collect);
			List<QarRestrictedPartEntity> selectList = qarRestrictedPartDao.selectList(queryWrapper);
			for (QarRestrictedPart qarRestrictedPart : list) {
				for (QarRestrictedPartEntity qarRestrictedPartEntity2 : selectList) {
					if (qarRestrictedPart.getInnerData().getId() == qarRestrictedPartEntity2.getId()) {
						String checkUseJobNumber = qarRestrictedPart.getInnerData().getCheckUserJobNumber();
						qarRestrictedPartEntity2.setCheckUserJobNumber(checkUseJobNumber);
						qarRestrictedPartEntity2.setCheckUser(userUtil.getUserTrueNameInfoByEcode(checkUseJobNumber));
						qarRestrictedPartEntity2.setIsCheck("1");
						baseEntityDataUtil.updateBaseEntityData(qarRestrictedPartEntity2);
						continue;
					}
				}
			}
			this.updateBatchById(selectList, selectList.size());
			if (itemList.size() >0) {
				List<Long> idList = itemList.stream().map(item -> item.getId()).filter(item -> item != 0).collect(Collectors.toList());
				List<QarRestrictedPartItemEntity> selectBatchIds = qarRestrictedPartItemDao.selectBatchIds(idList);
				for (QarRestrictedPartItemEntity qarRestrictedPartItemEntity : itemList) {
					for (QarRestrictedPartItemEntity qarRestrictedPartItemEntity2 : selectBatchIds) {
						if (qarRestrictedPartItemEntity.getId() == qarRestrictedPartItemEntity2.getId()) {
							qarRestrictedPartItemEntity2.setBaseTime(qarRestrictedPartItemEntity.getBaseTime());
							qarRestrictedPartItemEntity2.setDueProcessing(qarRestrictedPartItemEntity.getDueProcessing());
							qarRestrictedPartItemEntity2.setStorageTime(qarRestrictedPartItemEntity.getStorageTime());
							baseEntityDataUtil.updateBaseEntityData(qarRestrictedPartItemEntity2);
							break;
						}
					}
				}
				qarRestrictedPartItemDataHandler.updateBatchById(selectBatchIds, selectBatchIds.size());
			}
			
		}
		return resultBean;
	}

	// 通过qar查询对应的限售件信息
	public List<QarRestrictedPart> getByQarNo(String qarNo) {
		QueryWrapper<QarRestrictedPartEntity> queryWrapper = new QueryWrapper<QarRestrictedPartEntity>();
		queryWrapper.eq("row_status", 1);
		queryWrapper.eq("qar_no", qarNo);
		List<QarRestrictedPartEntity> selectList = qarRestrictedPartDao.selectList(queryWrapper);
		List<QarRestrictedPart> collect = selectList.stream().map(item -> {
			QueryWrapper<QarRestrictedPartItemEntity> query = new QueryWrapper<QarRestrictedPartItemEntity>();
			query.eq("row_status", 1);
			query.eq("parent_id", item.getId());
			List<QarRestrictedPartItemEntity> selectByQuery = qarRestrictedPartItemDataHandler.selectByQuery(query);
			QarRestrictedPart qarRestrictedPart = new QarRestrictedPart();
			qarRestrictedPart.setInnerData(item);
			if (!CollectionUtils.isEmpty(selectByQuery)) {
				qarRestrictedPart.setRestrictedPartItemList(selectByQuery);
			}
			return qarRestrictedPart;
		}).collect(Collectors.toList());
		return collect;
	}
	
	// 限售件单个提交功能
	public ResultBean batchInsertCheckData(QarRestrictedPartEntity qarRestrictedPartEntity) {
		ResultBean resultBean = new ResultBean(true);
		// 查询限售件对应的数据
		QarRestrictedPartEntity selectById = qarRestrictedPartDao.selectById(qarRestrictedPartEntity.getId());
		selectById.setBaseDate(qarRestrictedPartEntity.getBaseDate());
		selectById.setCheckUserJobNumber(qarRestrictedPartEntity.getCheckUserJobNumber());
		String userTrueNameInfoByEcode = userUtil.getUserTrueNameInfoByEcode(qarRestrictedPartEntity.getCheckUserJobNumber());
		selectById.setCheckUser(userTrueNameInfoByEcode);
		selectById.setRestrictedPartRequirements(qarRestrictedPartEntity.getRestrictedPartRequirements());
		selectById.setFinishedProductSerialNumber(qarRestrictedPartEntity.getFinishedProductSerialNumber());
		selectById.setIsCheck("1");
		baseEntityDataUtil.setBaseEntityData(selectById);
		qarRestrictedPartDao.updateById(selectById);
		resultBean.setObject(selectById);
		return resultBean;
	}

	public List<QarRestrictedPartEntity> selectByQuery(QueryWrapper<QarRestrictedPartEntity> queryWrapper) {
		List<QarRestrictedPartEntity> selectList = qarRestrictedPartDao.selectList(queryWrapper);
		return selectList;
	}
	
	// 查询打印的数据
	public RestrictedPartItemPrint selectPrintData(long itemId,String partNo) {
		RestrictedPartItemPrint restrictedPartItemPrint = new RestrictedPartItemPrint();
		QarRestrictedPartItemEntity byId = qarRestrictedPartItemDataHandler.getById(itemId);
		QueryWrapper<QarRestrictedPartEntity> queryWrapper = new QueryWrapper<QarRestrictedPartEntity>();
		queryWrapper.eq("restricted_id", byId.getParentId());
		QarRestrictedPartEntity selectOne = qarRestrictedPartDao.selectOne(queryWrapper);
		restrictedPartItemPrint.setAssembly_Number(selectOne.getFinishedProductNo());
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.append(selectOne.getCheckUser()+"  ").append(selectOne.getCheckUserJobNumber());
		stringBuilder.append("  "+TimeUtil.formatLocalDateTimeToString(selectOne.getLastModifiedTime()));
		restrictedPartItemPrint.setInspection(stringBuilder.toString());
		restrictedPartItemPrint.setLimit_Serial_Number(selectOne.getRestrictedSerialNumber());
		restrictedPartItemPrint.setLimited_Method(byId.getLifeLimitedMethod());
		restrictedPartItemPrint.setLimited_Time(byId.getLifeLimitedTimeValue()+byId.getLifeLimitedTimeType());
		restrictedPartItemPrint.setPart_No(partNo);
		restrictedPartItemPrint.setReference_Date(TimeUtil.fomatDate(selectOne.getBaseDate()));
		restrictedPartItemPrint.setSerial_Number(selectOne.getFinishedProductSerialNumber());
		restrictedPartItemPrint.setStorage_Time(TimeUtil.fomatDate(byId.getStorageTime()));
		return restrictedPartItemPrint;
	}
}
